package pruebas;

import java.util.List;

import figuras.*;
import mapa.Mapeador;
import musica.*;
import persistencia.Archivador;

import junit.framework.TestCase;

public class TestArchivador extends TestCase {
		
	public void testCargar() {
		
		String pathArchivo = "Partituras/PartituraHuachiTorito.xml";
		
		Cancion miCancion = Archivador.cargar(pathArchivo);
		
		// se testea la carga verificando el titulo
		assertNotNull(miCancion);
		assertEquals("Huachi Torito", miCancion.getTitulo());
		
		// testeo la cantidad de compaces de la partitura mirando el .xml
		Partitura miPartitura = miCancion.cantarCancion();
		List<Compas> misCompaces = miPartitura.getCompaces();
		assertEquals(5, misCompaces.size());
		
		// testeamos la partitura usando mapeador
		// testeo la cantidad de figuras mirando del .xml
		Mapeador miMapa = new Mapeador(miCancion);
		List<Figura> misFiguras = miMapa.mapearCancion();
		assertEquals(15, misFiguras.size());

		
		// testeo que haya cargado correctamente
		// verifico el primer elemento de la lista de figuras
		Figura unaFigura = misFiguras.get(0);
		assertNotNull(unaFigura);
		assertTrue(unaFigura instanceof Negra);
		
		// verifico el segundo elemento de la lista de figuras
		unaFigura = misFiguras.get(1);
		assertNotNull(unaFigura);
		assertTrue(unaFigura instanceof Corchea);
		
		// verifico el ultimo elemento de la lista de figuras
		unaFigura = misFiguras.get(14);
		assertNotNull(unaFigura);
		assertTrue(unaFigura instanceof Blanca);
	}
	
	// testeo de otra cancion
	public void testCargarCuCu() {
		
		String pathArchivo = "Partituras/Cu-Cu.xml";
		
		Cancion miCancion = Archivador.cargar(pathArchivo);
		
		// se testea la carga verificando el titulo
		assertNotNull(miCancion);
		assertEquals("Cu Cu", miCancion.getTitulo());
		
		// testeo la cantidad de compaces de la partitura mirando el .xml
		Partitura miPartitura = miCancion.cantarCancion();
		List<Compas> misCompaces = miPartitura.getCompaces();
		assertEquals(12, misCompaces.size());
		
		// testeamos la partitura usando mapeador
		// testeo la cantidad de figuras mirando del .xml
		Mapeador miMapa = new Mapeador(miCancion);
		List<Figura> misFiguras = miMapa.mapearCancion();
		assertEquals(30, misFiguras.size());
		
		// testeo que haya cargado correctamente
		// verifico el primer elemento de la lista de figuras
		Figura unaFigura = misFiguras.get(0);
		assertNotNull(unaFigura);
		assertTrue(unaFigura instanceof Negra);
		
		// verifico el ultimo elemento de la lista de figuras
		unaFigura = misFiguras.get(29);
		assertNotNull(unaFigura);
		assertTrue(unaFigura instanceof Negra);
	}
}
